package com.example.aigc_education.config;

import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.IndexOptions;
import com.mongodb.client.model.Indexes;
import org.bson.Document;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

@Component
public class MongoTTLIndexInitializer implements ApplicationRunner {

    /**
     * 构造器注入MongoTemplate实例
     */
    private final MongoTemplate mongoTemplate;
    public MongoTTLIndexInitializer(MongoTemplate mongoTemplate){
        this.mongoTemplate = mongoTemplate;
    }

    /**
     * 当 Spring Boot 应用启动并且上下文加载完成后，会自动执行 run 方法
     * 这里用于初始化指定集合的 TTL 索引
     *
     * @param args 应用启动参数
     * @throws Exception 可能抛出的异常
     */
    @Override
    public void run(ApplicationArguments args) throws Exception {
        createTTLIndex("theme_study_time", "expireAt");
    }

    /**
     * 为指定的集合创建TTL索引
     *
     * @param collectionName 集合名称
     * @param fieldName      过期字段名称
     */
    private void createTTLIndex(String collectionName, String fieldName) {
        // 获取集合
        MongoCollection<Document> collection = mongoTemplate.getCollection(collectionName);
        // 创建TTL索引 —— expireAfter(0L, TimeUnit.MINUTES) 表示根据字段值过期
        IndexOptions indexOptions = new IndexOptions().expireAfter(0L, TimeUnit.MINUTES);
        collection.createIndex(Indexes.ascending(fieldName), indexOptions);
    }


}
